package com.fulu.javabase.innerclass;

/**
 * 人类 - 外部类
 * 由此看出，非静态内部类可以直接访问外部类的实例变量、类变量、实例方法、类方法。
 * 这是因为在非静态内部类对象里，保存了一个它所寄生的外部类对象的引用（非静态内部
 * 类实例必须寄生在外部类实例里）。也就是说，非静态内部类对象总有一个隐式引用，指
 * 向了创建它的外部类对象
 *
 * @author GrimMjx
 */
public class Human {

    private static final int eyes = 2;

    private static void count() {
        System.out.println("I can count number");
    }

    private int teeth = 10;

    private void say() {
        System.out.println("Hello world");
    }

    /**
     * 人腿 - 非静态内部类
     */
    public class HumanLeg {
        private Double length;

        public HumanLeg(Double length) {
            this.length = length;
        }

        public void test() {
            say();
            count();
            System.out.println("I have " + eyes + " eyes");
            System.out.println("I have " + teeth + " teeth");
            System.out.println("My leg has " + length.toString() + "cm long");
        }
    }

    public static void main(String[] args) {
        Human human = new Human();
        HumanLeg humanLeg = human.new HumanLeg(100D);
        humanLeg.test();
    }
}